home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagg_m.zip / GRAPHICS.SWG / 0042_Bresenham Line.pas < prev    next >
Pascal/Delphi Source File  |  1993-11-02  |  1KB  |  52 lines

  1. {
  2. From: SEAN PALMER
  3. Subj: Bresenham's Line
  4.  
  5. You need a plot(x,y) procedure and a global color variable to use these as
  6. posted. }
  7.  
  8.  
  9. {bresenham's line}
  10. procedure line(x,y,x2,y2:integer);var d,dx,dy,ai,bi,xi,yi:integer;begin
  11.  if(x<x2)then begin xi:=1;dx:=x2-x;end else begin xi:=-1;dx:=x-x2;end;
  12.  if(y<y2)then begin yi:=1;dy:=y2-y;end else begin yi:=-1;dy:=y-y2;end;
  13.  plot(x,y);
  14.  if dx>dy then begin ai:=(dy-dx)*2;bi:=dy*2; d:=bi-dx;
  15.   repeat
  16.    if(d>=0)then begin inc(y,yi);inc(d,ai);end else inc(d,bi);
  17.    inc(x,xi);plot(x,y);
  18.    until(x=x2);
  19.   end
  20.  else begin ai:=(dx-dy)*2;bi:=dx*2; d:=bi-dy;
  21.   repeat
  22.    if(d>=0)then begin inc(x,xi);inc(d,ai);end else inc(d,bi);
  23.    inc(y,yi);plot(x,y);
  24.    until(y=y2);
  25.   end;
  26.  end;
  27.  
  28.  
  29. {filled ellipse}
  30. procedure disk(xc,yc,a,b:integer);
  31.  var x,y:integer; aa,aa2,bb,bb2,d,dx,dy:longint; begin
  32.  x:=0;y:=b;
  33.  aa:=longint(a)*a; aa2:=2*aa;
  34.  bb:=longint(b)*b; bb2:=2*bb;
  35.  d:=bb-aa*b+aa div 4;
  36.  dx:=0;dy:=aa2*b;
  37.  vLin(xc,yc-y,yc+y);
  38.  while(dx<dy)do begin
  39.   if(d>0)then begin dec(y); dec(dy,aa2); dec(d,dy); end;
  40.   inc(x); inc(dx,bb2); inc(d,bb+dx);
  41.   vLin(xc-x,yc-y,yc+y);vLin(xc+x,yc-y,yc+y);
  42.   end;
  43.  inc(d,(3*(aa-bb)div 2-(dx+dy))div 2);
  44.  while(y>=0)do begin
  45.   if(d<0)then begin
  46.    inc(x); inc(dx,bb2); inc(d,bb+dx);
  47.    vLin(xc-x,yc-y,yc+y);vLin(xc+x,yc-y,yc+y);
  48.    end;
  49.   dec(y); dec(dy,aa2); inc(d,aa-dy);
  50.   end;
  51.  end;
  52.